#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/socket.h>
/*
关于 void *
1)是一种指针类型
2）用于兼容不同的指针类型的地方
3）与其他类型指针可相互转化

*/
/*
目的：将new_skt 作为形参传入，千万不能传入地址
*/
void *thread_fun(void *arg){
    int sockfd = *((int *)arg);
    char buffer[100]="i am thread\r\n";
    while(1){
        if(-1==send(sockfd,buffer,strlen(buffer),MSG_NOSIGNAL)) {
            /*如果不设置 MSG_NOSIGNAL
              当客户端发生异常中断，则会产生SIGPIPE
              导致整个进程异常退出
            */
            printf("%d : send error\r\n",sockfd);
            close(sockfd);
            pthread_exit(0);
        }
        printf("%d : send ok\r\n",sockfd);
        sleep(1);     
    }
}
pthread_t socket_pthread_creat(pthread_t *thread_id,int arg){
    int thread_arg = arg; 
    /*此处是将传入的参数，立即复制到自己的栈区，避免下一个accept来临，而线程还未被调度*/
    if (pthread_create(thread_id, NULL, (void*)thread_fun,&thread_arg) != 0) {
        printf("pthread_create error.\r\n");
        exit(EXIT_FAILURE);
    }
    printf("thread: %u creat ok!\r\n",(unsigned int)*thread_id);
    pthread_detach(*thread_id);
    return *thread_id;
}